// 创建axios实例并配置拦截器
window.apiClient = axios.create({
    baseURL: '/',
    timeout: 10000,
    headers: {
        'Content-Type': 'application/json'
    }
});

// 请求拦截器
window.apiClient.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么
        console.log('请求拦截器 - 发送请求前', config);
        
        // 可以在这里添加token等认证信息
        const token = localStorage.getItem('token');
        if (token) {
            config.headers.Authorization = `Bearer ${token}`;
        }
        
        return config;
    },
    error => {
        // 对请求错误做些什么
        console.error('请求拦截器 - 请求错误', error);
        return Promise.reject(error);
    }
);

// 响应拦截器
window.apiClient.interceptors.response.use(
    response => {
        // 统一格式：{code, data, msg}
        if (response.data && typeof response.data === 'object' && 'code' in response.data) {
            if (response.data.code === 200) {
                return response.data;
            } else {
                // 业务错误，抛出带msg的Error
                return Promise.reject(new Error(response.data.msg || '请求失败'));
            }
        }
        // 非统一格式，直接返回
        return response.data;
    },
    error => {
        // 检查是否是401错误
        if (error.response && error.response.status === 401) {
            // 清除本地存储的认证信息
            localStorage.removeItem('token');
            localStorage.removeItem('user');
            // 直接跳转到登录页面
            window.location.href = '/auth/login';
            return Promise.reject(new Error('Token已过期，请重新登录'));
        }
        
        let errorMessage = '请求失败，请稍后重试';
        if (error.response) {
            // 检查后端返回的错误格式 {code, msg}
            if (error.response.data && error.response.data.msg) {
                errorMessage = error.response.data.msg;
            } else {
                // 根据HTTP状态码处理
                switch (error.response.status) {
                    case 403:
                        errorMessage = '拒绝访问';
                        break;
                    case 404:
                        errorMessage = '请求的资源不存在';
                        break;
                    case 500:
                        errorMessage = '服务器错误';
                        break;
                    default:
                        errorMessage = error.response.data.message || error.response.data.msg || errorMessage;
                }
            }
        } else if (error.request) {
            errorMessage = '网络错误，请检查网络连接';
        }
        return Promise.reject(new Error(errorMessage));
    }
);
